- 验证是否支持OpenGLES2.0
1 | //检查设备是否支持OpenGL ES 2.0 |
确保可用,在manifest里面添加验证1
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
- 定义
vertex_shader.glsl
和fragment_shader.glsl
到res/raw
里面
vertex_shader.glsl1
2
3
4attribute vec4 vPosition;
void main(){
gl_Position = vPosition;
}
fragment_shader.glsl1
2
3
4
5precision mediump float;
uniform vec4 vColor;
void main(){
gl_FragColor = vColor;
}
OpenGL ES Shader的三种变量类型uniform,attribute和varying
- 定义形状
1 | import android.content.Context; |
ShaderUtil.java
1 |
|
定义shader
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import android.content.Context;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
public class MyRender implements GLSurfaceView.Renderer {
private Context context;
private Triangle triangle;
public MyRender(Context context) {
this.context = context;
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
triangle = new Triangle(context);
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
//宽高
GLES20.glViewport(0, 0, width, height);
}
public void onDrawFrame(GL10 gl) {
//清空颜色
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
//设置背景颜色
// GLES20.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
triangle.draw();
}
}设置
shader
到GLSurfaceView
1 | import android.content.Context; |
上述三角形已经绘制成功。
- 绘制四边形
绘制四边形的方式是由两个三角形形成一个四边形,所以顶点位置一定要注意。
调用GLES20.glDrawArrays
的时候设置flog
可以设置为GLES20.GL_TRIANGLE_STRIP
和GLES20.GL_TRIANGLES
,前者复用坐标,后者分别取几个坐标。